<template>
  <div></div>
</template>

<script>
export default {
  /***
   * repl交互控制台
   */
  name: "hg-console-repl",
  props:{
    /***
     * 环境变量
     */
    env:{
      type:Object,
      default:()=>({})
    },

    /***
     * 列数
     */
    cols:{
      type:Number,
      default:80,
    },

    /***
     * 控制台背景颜色
     */
    background:{
      type:String,
      default:'black',
    },

    /***
     * 控制台文字颜色
     */
    foreground:{
      type:String,
      default: 'white',
    },

    /***
     * 自定义命令列表：键值对，键为命令名称，值为命令参数
     * {args:Array<string>：必须参数名称, kwargs:Map<string, any>：命名可选参数默认值，flags:Map<string,boolean>：选项，handler:function(args=[],kwargs={},flags=[])=>any}
     * 另一种情况是指可为string，表示执行的是该行命令
     * 另一种情况可以是string[]，表示执行这段批处理指令
     * 另一种情况可以是一个函数，是对象的简便写法，代表handler
     */
    commands:{
      type:Object,
      default:()=>({})
    },

    /***
     * 自定义处理器，不使用默认的命令处理器：(command:string, args:string)=>any
     */
    handler:{
      type:Function,
      default:null,
    },

    /***
     * 是否按下回车执行
     */
    execOnEnter:{
      type:Boolean,
      default:true
    },

    /***
     * 是否自动补全
     */
    AutoComplete:{
      type:Boolean,
      default:false,
    },

    /***
     * 是否开启tab自动补全
     */
    AutoTab:{
      type:Boolean,
      default:true,
    },

    /***
     * 输入输出处理器，接收输入，返回结果将会显示到控制台
     */
    processor:{
      type:Function,
      default:()=>({})
    },

    /***
     * 初始历史列表
     */
    history:{
      type:Array,
      default:()=>[]
    },

    /***
     * 输入提示符
     */
    inPrompt:{
      type:String,
      default:'<<'
    },

    /***
     * 输出提示符
     */
    outPrompt:{
      type:String,
      default:'>>'
    },

    /***
     * 光标样式：line，block，underline
     */
    cursor:{
      type:String,
      default:'line'
    },

    /***
     * 光标是否闪烁
     */
    cursorBlingking:{
      type:Boolean,
      default:true,
    },

    /***
     * 控制台的初始打印语句
     */
    welcomeText:{
      type:String,
      default:'',
    },

    /***
     * 是否可复制
     */
    canCopy:{
      type:Boolean,
      default:true,
    },

    /***
     * 是否扩展命令，还是覆写命令
     */
    overwriteCommands:{
      type:Boolean,
      default:false,
    },

    /***
     * 表示可以输入的字符集
     */
    charset:{
      type:String,
      default:'utf-8'
    },

    /***
     * 控制台报错的样式
     */
    errorClass:{
      type:String,
      default:''
    },

    /***
     * 是否自动检测url为超链接a
     */
    linkUrl:{
      type:Boolean,
      default:true,
    },

    /***
     * 是否锁定控制台
     */
    readonly:{
      type:Boolean,
      default:false,
    }
  },
  methods:{
    /**
     * 清空屏幕的输出
     * @param {Boolean} clearBuffer 是否清除缓存
     */
    cls(clearBuffer = true){

    },
    /***
     * 从剪贴板粘贴文本到控制台
     */
    paste(){

    },
    /***
     * 复制当前选中文本到剪贴板
     */
    copy(){

    },

    /***
     * 打印log信息
     * @param {any[]} content 打印内容
     */
    log(...content){

    },
    /***
     * 打印error信息
     * @param {any[]} content 打印内容
     */
    error(...errors){

    },
    /***
     * 打印warns信息
     * @param {any[]} content 打印内容
     */
    warn(...warns){

    },

    /***
     * 控制台跳转光标到指定处
     */
    goto(x, y, absolute=true){

    },
    /***
     * 光标跳转到下一行行首
     */
    newLine(count=1){

    },
    /***
     * 光标返回上一个字符
     */
    back(count=1){

    },

    /***
     * 执行指定的命令
     * @param {string | string[]} cmd 命令
     */
    exec(cmd){

    },

    /***
     * 控制台打印表格
     */
    table(){

    },
    /***
     * 打印分组
     */
    group(name=""){

    },
    /***
     * 结束分组
     */
    groupEnd(){

    },
    /***
     * 打印树形
     */
    tree(){

    },
    /***
     * 控制台打印图片
     */
    image(src="", width=0, height=0){

    },
    /***
     * 控制台打印选项列表
     */
    choices(multiple=false, ...items){

    },
    /***
     * 控制台打印html
     */
    html(src){

    },
    /***
     * 控制台打印元素
     * @param {string} tag 标签名称
     * @param {Map<string, string>} attributes 属性列表
     * @param {string} content 内容
     * @param {Array} children 子元素
     */
    element(tag, attributes={}, content="", children=[]){

    },
    /***
     * 控制台打印富文本
     */
    richtext(text='', {foreground='black', background='white', fontSize='normal', fontStyle="normal", fontFamily="宋体"}={}){

    },
    /***
     * 控制台打印一个视频
     */
    video(src, poster='', autoplay=false, muted=true, width=0, height=0, objectFit='contain', controls=true){

    },
    /***
     * 控制台打印有序列表
     */
    ol(type="number", ...list){

    },
    /***
     * 控制台打印无序列表
     */
    ul(symbol='◇', ...list){

    },
    /***
     * 控制台打印超链接
     */
    link(label="", href="", underline=true){

    },
    /***
     * 控制台打印图形
     */
    graphics(expr){

    },

    /***
     * 控制台输入命令
     */
    prompt(prompt="", defaultValue=""){

    },
  },
  data(){
    return {
      /***
       * 历史输入记录
       */
      inputs:[],
      /***
       * 当前输入
       */
      input:'',
      /***
       * 历史输出记录
       */
      outputs:[],
      /***
       * 历史打印到控制台的输出
       */
      logs:[],
      /***
       * 历史打印到控制台的错误
       */
      errors:[],
      /***
       * 历史输出warns
       */
      warns:[],
      /***
       * 控制台光标当前所处的位置
       */
      cursorPos:{
        x:0,
        y:0
      }
    }
  },

}
</script>

<style scoped>

</style>